#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
MySQL数据库初始化脚本
创建数据表并插入初始化数据
"""

from datetime import datetime
from database.mysql_manager import mysql_manager
from models import User, Project, Interface, TestCase
from config import current_config
import sys


def initialize_mysql_database():
    """初始化MySQL数据库"""
    try:
        print(f"正在初始化MySQL数据库: {current_config.MYSQL_DB}")
        print(f"MySQL连接信息: {current_config.MYSQL_HOST}:{current_config.MYSQL_PORT}")
        print("-" * 60)
        
        # 获取数据库会话
        session = mysql_manager.get_session()
        if not session:
            print("❌ 无法获取数据库会话")
            return False
        
        # 创建数据表
        mysql_manager._create_tables()
        
        # 创建索引
        mysql_manager.create_indexes()
        
        # 清空现有数据（开发环境）
        if current_config.DEBUG:
            session.query(TestCase).delete()
            session.query(Interface).delete()
            session.query(Project).delete()
            session.query(User).delete()
            session.commit()
            print("🗑️ 已清空现有数据")
        
        # 初始化用户数据
        init_users(session)
        
        # 初始化项目数据
        init_projects(session)
        
        # 初始化接口数据
        init_interfaces(session)
        
        # 初始化测试案例数据
        init_test_cases(session)
        
        session.close()
        print("\n✅ MySQL数据库初始化完成!")
        return True
        
    except Exception as e:
        print(f"❌ 初始化失败: {e}")
        return False


def init_users(session):
    """初始化用户数据"""
    users_data = [
        {
            'username': 'admin',
            'password': 'admin123',  # 生产环境应加密
            'email': 'admin@aitest.com',
            'role': 'administrator',
            'permissions': ['read', 'write', 'admin'],
            'is_active': True
        },
        {
            'username': 'user1',
            'password': 'user123',
            'email': 'user1@aitest.com',
            'role': 'user',
            'permissions': ['read', 'write'],
            'is_active': True
        },
        {
            'username': 'user2',
            'password': 'user123',
            'email': 'user2@aitest.com',
            'role': 'user',
            'permissions': ['read'],
            'is_active': True
        },
        {
            'username': 'idahan',
            'password': 'Hb@123456',
            'email': 'idahan@aitest.com',
            'role': 'administrator',
            'permissions': ['read', 'write', 'admin'],
            'is_active': True
        }
    ]
    
    for user_data in users_data:
        user = User(**user_data)
        session.add(user)
    
    session.commit()
    print(f"✅ 创建了 {len(users_data)} 个用户")


def init_projects(session):
    """初始化项目数据"""
    projects_data = [
        {
            'name': 'AI智能助手',
            'description': '基于机器学习的智能聊天机器人项目',
            'created_by': 'admin',
            'status': 'active',
            'tags': ['AI', 'chatbot', 'machine learning'],
            'settings': {
                'auto_test': True,
                'notification': True,
                'api_version': 'v1'
            }
        },
        {
            'name': '图像识别系统',
            'description': '计算机视觉项目，用于目标检测和图像分析',
            'created_by': 'user1',
            'status': 'active',
            'tags': ['computer vision', 'detection'],
            'settings': {
                'auto_test': False,
                'notification': True,
                'api_version': 'v2'
            }
        },
        {
            'name': '数据分析平台',
            'description': '大数据处理和分析平台',
            'created_by': 'user2',
            'status': 'active',
            'tags': ['big data', 'analytics'],
            'settings': {
                'auto_test': True,
                'notification': False,
                'api_version': 'v1'
            }
        }
    ]
    
    for project_data in projects_data:
        project = Project(**project_data)
        session.add(project)
    
    session.commit()
    print(f"✅ 创建了 {len(projects_data)} 个项目")


def init_interfaces(session):
    """初始化接口数据"""
    # 获取项目ID
    project1 = session.query(Project).filter(Project.name == 'AI智能助手').first()
    project2 = session.query(Project).filter(Project.name == '图像识别系统').first()
    
    if not project1 or not project2:
        print("⚠️ 未找到项目，跳过接口初始化")
        return
    
    interfaces_data = [
        {
            'project_id': project1.id,
            'name': '用户登录',
            'url': '/api/auth/login',
            'method': 'POST',
            'description': '用户认证登录接口',
            'status': 'active',
            'headers': {'Content-Type': 'application/json'},
            'parameters': {
                'username': 'string',
                'password': 'string'
            },
            'response_schema': {
                'success': 'boolean',
                'data': 'object'
            }
        },
        {
            'project_id': project1.id,
            'name': '获取用户信息',
            'url': '/api/auth/user/{id}',
            'method': 'GET',
            'description': '根据ID获取用户详细信息',
            'status': 'active',
            'headers': {'Authorization': 'Bearer token'},
            'parameters': None,
            'response_schema': {
                'success': 'boolean',
                'data': {
                    'id': 'string',
                    'username': 'string',
                    'email': 'string'
                }
            }
        },
        {
            'project_id': project2.id,
            'name': '图像上传',
            'url': '/api/image/upload',
            'method': 'POST',
            'description': '上传图像进行识别',
            'status': 'active',
            'headers': {'Content-Type': 'multipart/form-data'},
            'parameters': {
                'image': 'file',
                'format': 'string'
            },
            'response_schema': {
                'success': 'boolean',
                'data': {
                    'image_id': 'string',
                    'analysis': 'object'
                }
            }
        }
    ]
    
    for interface_data in interfaces_data:
        interface = Interface(**interface_data)
        session.add(interface)
    
    session.commit()
    print(f"✅ 创建了 {len(interfaces_data)} 个接口")


def init_test_cases(session):
    """初始化测试案例数据"""
    # 获取接口ID
    login_interface = session.query(Interface).filter(Interface.name == '用户登录').first()
    upload_interface = session.query(Interface).filter(Interface.name == '图像上传').first()
    
    if not login_interface or not upload_interface:
        print("⚠️ 未找到接口，跳过测试案例初始化")
        return
    
    test_cases_data = [
        {
            'interface_id': login_interface.id,
            'name': '正常登录测试',
            'description': '使用有效用户名和密码进行登录测试',
            'type': 'functional',
            'status': 'active',
            'priority': 'high',
            'test_data': {
                'username': 'admin',
                'password': 'admin123'
            },
            'expected_result': '{"success": true, "status_code": 200}',
            'created_by': 'admin'
        },
        {
            'interface_id': login_interface.id,
            'name': '错误密码测试',
            'description': '使用错误密码进行登录测试',
            'type': 'negative',
            'status': 'active',
            'priority': 'medium',
            'test_data': {
                'username': 'admin',
                'password': 'wrong_password'
            },
            'expected_result': '{"success": false, "status_code": 401}',
            'created_by': 'admin'
        },
        {
            'interface_id': upload_interface.id,
            'name': '图像上传测试',
            'description': '上传有效图像文件进行识别测试',
            'type': 'functional',
            'status': 'active',
            'priority': 'high',
            'test_data': {
                'image': 'test_image.jpg',
                'format': 'jpg'
            },
            'expected_result': '{"success": true, "status_code": 200}',
            'created_by': 'user1'
        }
    ]
    
    for test_case_data in test_cases_data:
        test_case = TestCase(**test_case_data)
        session.add(test_case)
    
    session.commit()
    print(f"✅ 创建了 {len(test_cases_data)} 个测试案例")


def main():
    """主函数"""
    print("=" * 60)
    print("MySQL数据库初始化工具")
    print("=" * 60)
    
    # 检查数据库连接
    health_status = mysql_manager.health_check()
    if health_status['status'] != 'healthy':
        print("❌ 数据库连接失败，请检查配置")
        print(f"错误信息: {health_status['message']}")
        sys.exit(1)
    
    print("✅ 数据库连接正常")
    print(f"MySQL版本: {health_status['details']['mysql_version']}")
    print()
    
    # 询问用户确认
    confirm = input("是否确认初始化数据库？这将清空现有数据 (y/N): ")
    if confirm.lower() != 'y':
        print("❌ 操作已取消")
        sys.exit(0)
    
    # 执行初始化
    if initialize_mysql_database():
        print("\n✅ 数据库初始化成功！")
        print("\n📋 默认登录账户:")
        print("  管理员: admin / admin123")
        print("  用户1: user1 / user123")
        print("  用户2: user2 / user123") 
        print("  管理员2: idahan / Hb@123456")
    else:
        print("\n❌ 数据库初始化失败！")
        sys.exit(1)


if __name__ == '__main__':
    main()